package estacion.dominio;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import estacion.persistencia.FPProducto;
import estacion.persistencia.FPTienda;

public class Producto {

	private int Codigo_producto;
	private int Codigo_tienda;
	private String Proveedor;
	private String Tipo;
	private double Precio;
	private String Revi;
	private int cantidad_producto;
	private int codigo_linea;
	private int codigo_tramo;
	
	public Producto(){
		Codigo_producto=0;
		Codigo_tienda=0;
		Proveedor="";
		Tipo="";
		Precio=0.0;
		Revi="";
		cantidad_producto=0;
		codigo_linea=0;
		codigo_tramo=0;
	}
	
	public Producto(int new_Codigo_producto, int new_Codigo_tienda, String new_Proveedor, String new_Tipo, double new_Precio, String new_Revi, int new_cantidad, int new_codlinea, int new_codtramo){
		Codigo_producto = new_Codigo_producto;
		Codigo_tienda = new_Codigo_tienda;
		Proveedor = new_Proveedor;
		Tipo = new_Tipo;
		Precio = new_Precio;
		Revi = new_Revi;
		cantidad_producto=new_cantidad;
		codigo_linea=new_codlinea;
		codigo_tramo=new_codtramo;
	}


	public int getCodigo_producto() {
		return Codigo_producto;
	}

	public void setCodigo_producto(int new_Codigo_producto) {
		Codigo_producto = new_Codigo_producto;
	}
	
	public int getCodigo_tienda() {
		return Codigo_tienda;
	}

	public void setCodigo_tienda(int new_Codigo_tienda) {
		Codigo_tienda = new_Codigo_tienda;
	}
	
	public String getProveedor() {
		return Proveedor;
	}

	public void setProveedor(String new_Proveedor) {
		Proveedor = new_Proveedor;
	}
	
	public String getTipo() {
		return Tipo;
	}

	public void setTipo(String new_Tipo) {
		Tipo = new_Tipo;
	}

	public double getPrecio() {
		return Precio;
	}

	public void setPrecio(double new_Precio) {
		Precio = new_Precio;
	}
	
	public String getRevi() {
		return Revi;
	}

	public void setRevi(String new_Revi) {
		Revi = new_Revi;
	}	
	
	public int getCantidad_producto() {
		return cantidad_producto;
	}

	public void setCantidad_producto(int cantidad_producto) {
		this.cantidad_producto = cantidad_producto;
	}

	public int getCodigo_linea() {
		return codigo_linea;
	}

	public void setCodigo_linea(int codigo_linea) {
		this.codigo_linea = codigo_linea;
	}

	public int getCodigo_tramo() {
		return codigo_tramo;
	}

	public void setCodigo_tramo(int codigo_tramo) {
		this.codigo_tramo = codigo_tramo;
	}

	public void quitarProducto() throws Exception {
		this.cantidad_producto=this.cantidad_producto-1;	
		this.modificarProducto();
	}
	
	public Producto consultProducto(int cod_producto, int cod_tienda) throws Exception{
		return FPProducto.consultProducto(cod_producto, cod_tienda);	
	}
	
	public Producto consultProducto(String nombre_producto) throws Exception{
		return FPProducto.consultProducto(nombre_producto);	
	}
	
	public List<Producto> getProductos(int idTienda) throws Exception{
		return FPProducto.getProductos(idTienda);	
	}
	public Producto getBillete(Tramo t) throws Exception{
		return FPProducto.consultBillete(t);
		
	}
	
	public void modificarProducto() throws Exception{
		FPProducto.modificarProducto(this,this.Codigo_producto, this.Codigo_tienda);
	}
	public void modificarBillete() throws Exception{
		FPProducto.modificarBillete(this,this.Codigo_producto, this.Codigo_tienda);
	}
	public void actualizarBillete() throws Exception{
		FPProducto.actualizarBillete(this,this.codigo_linea);
	}
	
	public void eliminarProducto(int cod_producto, int cod_tienda) throws Exception{
		FPProducto.deleteProducto(cod_producto, cod_tienda);
	}
	
	public void eliminarBillete(int cod_linea) throws Exception{
		FPProducto.deleteBillete(cod_linea);
	}
	
	public double consultarPrecioBillete(Vector<Tramo> recorrido) throws Exception{
		Linea l=new Linea();
		double precio=0;
		Producto p;
		Tramo t=new Tramo();
		if(recorrido.get(0).getCodigo_tramo()==recorrido.get(1).getCodigo_tramo()){
			p=getBillete(recorrido.get(0));
			if(p!=null)precio=p.getPrecio();
		}else{
			for(int i=recorrido.get(0).getCodigo_tramo();i<=recorrido.get(1).getCodigo_tramo();i++){
				p=getBillete(t.consultarTramo(i, recorrido.get(0).getCodigo_linea()));
				if(p!=null)	precio=precio+p.getPrecio();
			}
		}
		return precio;
	}
	public boolean comprarBillete(Vector<Tramo> recorrido) throws Exception {
		boolean compra=false;
		int parado=0;
		Producto p;
		Tienda t=new Tienda();
		Tramo tra=new Tramo();
		t=t.consultTiendaporCodigo(4);
		if(recorrido.get(0).getCodigo_tramo()==recorrido.get(1).getCodigo_tramo()){
			p=getBillete(recorrido.get(0));
			if(p!=null){
				if(p.getCantidad_producto()>0){
					p.setCantidad_producto(p.getCantidad_producto()-1);
					p.modificarBillete();
					t.setDinero_recaudado(t.getDinero_recaudado()+p.getPrecio());
					t.modificarTienda();
					compra= true;
				}
			}
		}else{
			for(int i=recorrido.get(0).getCodigo_tramo();i<=recorrido.get(1).getCodigo_tramo();i++){
				p=getBillete(tra.consultarTramo(i, recorrido.get(0).getCodigo_linea()));
				if(p.getCantidad_producto()>0){
					p.setCantidad_producto(p.getCantidad_producto()-1);
					p.modificarBillete();
					t.setDinero_recaudado(t.getDinero_recaudado()+p.getPrecio());
					compra=true;
				}else {parado=i;compra=false;break;
				}
			}
			if(!compra){
				for(int i=recorrido.get(0).getCodigo_tramo();i<parado;i++){
					p=getBillete(tra.consultarTramo(i, recorrido.get(0).getCodigo_linea()));
					p.setCantidad_producto(p.getCantidad_producto()+1);
					p.modificarBillete();

				}
			}else t.actualizarTienda();
		}
		return compra;
		}
		
		

	
	public void insertProducto() throws Exception{
		FPProducto.insertProducto(this);
	}
	
	public void insertBillete() throws Exception{
		FPProducto.insertBillete(this);
	}
	
	public Producto getProducto(){
		return this;
	}
	public String getNombreTienda() throws Exception{
		Tienda t=new Tienda();
		return (t.consultTiendaporCodigo(this.Codigo_tienda)).getTipo_producto();
	}

	public boolean comprarProducto(int cod_producto, int cod_tienda) throws Exception {
		Producto p=this.consultProducto(cod_producto, cod_tienda);
		if(p.getCantidad_producto()==0) return false;
		else{
			p.setCantidad_producto(p.getCantidad_producto()-1);
			p.modificarProducto();
			Tienda t=new Tienda();
			t=t.consultTiendaporCodigo(cod_tienda);
			t.setDinero_recaudado((int) (t.getDinero_recaudado()+p.getPrecio()));
			t.modificarTienda();
			return true;
		}
		
		
	}



}
